package com.love_weinuo.util;

import com.love_weinuo.bean.RegisterSendCodeBean;
import com.love_weinuo.bean.params;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.love_weinuo.application.LoveApplication;
import com.love_weinuo.bean.Constants;

import org.json.JSONException;

import java.io.File;
import java.util.List;

import static com.lzy.okgo.OkGo.get;
import static com.lzy.okgo.OkGo.post;

/**
 * Created by Administrator
 * on 2019/2/21.
 */

public class HTTPAPI {

    public static HTTPAPI instance;

    public static HTTPAPI getInstance() {
        if (instance == null) {
            instance = new HTTPAPI();
        }
        return instance;
    }

    public void register(String phone, String pwd, String code,
                         String jtoken,
                         StringCallback callback) {

        params  params = new params();
        /**
         public String userCode;
         public String userSex;
         public String userPhone;
         public String pwd;
         public String userNick;
         public String KPCode;
         public String userHead;
         public String userSign;
         */
        params.setUserCode("15515291707");
        params.setUserSex("1");
        params.setUserPhone("15515291707");
        params.setPwd("111111");
        params.setUserNick("一个人的暗");
        params.setKPCode("532245");
        params.setUserHead("");
        params.setUserSign("");
        post(Constants.URL_REGISTER)
                .tag(this)
                .headers("type", "ANDROID")
                .connTimeOut(30000)
                .params("mobile", phone)
                .params("pwd", pwd)
                .params("code", code)
                .params("jtoken", jtoken)
                .execute(callback);
    }

    public void login(String phone, String pwd, String jtoken, StringCallback callback) {
        LogUtil.e("设备推送ID-->" + jtoken);
        post(Constants.URL_LOGIN)
                .tag(this)
                .connTimeOut(30000)
                .params("mobile", phone)
                .params("pwd", pwd)
                .params("jtoken", jtoken)
                .execute(callback);
    }

    public void getRegisterCode(String phone, StringCallback callback) {
        //        LogUtil.e("本机IMSI-->" + MobileInfoUtil.getIMSI(LoveApplication.getInstance()));
        RegisterSendCodeBean codeBean = new RegisterSendCodeBean();
        codeBean.setType("1");
        codeBean.setPhone("15515291707");

        post(Constants.URL_REGISTER_CODE)
                .tag(this)
                .connTimeOut(30000)
                .params("params", GsonUtil.BeanToJson(codeBean))
                .execute(callback);
    }

    public void getForgetCode(String phone, StringCallback callback) {
        post(Constants.URL_FORGET_CDOE)
                .tag(this)
                .headers("appid", MobileInfoUtil.getIMSI(LoveApplication.getInstance()))
                .connTimeOut(30000)
                .params("mobile", phone)
                .execute(callback);
    }

    /**
     * 更新密码
     *
     * @param phone    手机号码
     * @param pwd      密码
     * @param code     验证码
     * @param callback 联网回调
     */
    public void updataPwd(String phone, String pwd, String code, StringCallback callback) {

        LogUtil.e("修改密码phone==>" + phone);
        LogUtil.e("修改密码pwd==>" + pwd);
        LogUtil.e("修改密码code==>" + code);

        post(Constants.URL_UPDATA_PWD)
                .tag(this)
                .headers("appid", MobileInfoUtil.getIMSI(LoveApplication.getInstance()))
                .connTimeOut(30000)
                .params("mobile", phone)
                .params("pwd", pwd)
                .params("code", code)
                .execute(callback);
    }

    /**
     * 农民增加土地
     *
     * @param name     土地别名
     * @param userid   用户ID
     * @param point    土地经纬度
     * @param area     土地面积
     * @param centerX  longitude    经度
     * @param centerY  latitude     纬度
     * @param callback
     */
    public void addLand(String name, String userid, String point, String area,
                        String centerX, String centerY, String perimeter,
                        String landarea,
                        StringCallback callback) {

        LogUtil.e("添加土地的坐标点==>" + point);
        post(Constants.URL_ADD_LAND)
                .tag(this)
                .headers("appid", MobileInfoUtil.getIMSI(LoveApplication.getInstance()))
                .connTimeOut(30000)
                .params("name", name)
                .params("userid", userid)
                .params("point", point)
                .params("area", area)
                .params("centerX", centerX)
                .params("centerY", centerY)
                .params("perimeter", perimeter)
                .params("landarea", landarea)
                .execute(callback);
    }

    /**
     * 获取土地列表
     *
     * @param userid   用户ID
     * @param callback
     */
    public void getLands(String userid, StringCallback callback) {
        OkGo.get(Constants.URL_GET_LAND)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .execute(callback);
    }

    /**
     * 农民发布拼单
     *
     * @param userid    用户ID
     * @param landid    土地ID
     * @param starttime 拼单开始时间
     * @param endtime   拼单结束时间
     * @param pesticide 农药
     * @param sumarea   要拼成的面积
     * @param pname     拼单名字
     * @param callback  联网回调
     */
    public void sendPindan(String pname, String userid, String landid, String starttime, String endtime, String pesticide,
                           String sumarea, StringCallback callback) {

        LogUtil.e("userId-->" + userid);
        LogUtil.e("landid-->" + landid);
        LogUtil.e("starttime-->" + starttime);
        LogUtil.e("endtime-->" + endtime);
        LogUtil.e("pesticide-->" + pesticide);
        LogUtil.e("sumarea-->" + sumarea);
        LogUtil.e("pname-->" + pname);

        post(Constants.URL_SEND_PINDAN)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("landid", landid)
                .params("starttime", starttime)
                .params("endtime", endtime)
                .params("pesticide", pesticide)
                .params("sumarea", sumarea)
                .params("pname", pname)
                .execute(callback);
    }

    /**
     * 发布拼单之创建订单
     *
     * @param userid      用户ID
     * @param pordernumid 订单金额
     * @param payfrom     支付类型 0 定金  1 尾款  2 直接下单
     * @param callback    联网回调
     */
    public void createOrder(String userid, String pordernumid,
                            String payfrom,
                            StringCallback callback) {
        LogUtil.e("userid-->" + userid);
        LogUtil.e("pordernumid-->" + pordernumid);
        post(Constants.URL_CREATE_ORDER)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("pordernumid", pordernumid)
                .params("payfrom", payfrom)
                .execute(callback);
    }

    /**
     * 加入拼单
     *
     * @param userid    用户ID
     * @param landid    土地ID
     * @param pordernum 拼单单号
     * @param pesticide 农药
     * @param pcode     邀请码
     * @param callback  联网回调
     */
    public void joinProder(String userid, String landid, String pordernum,
                           String pesticide, String pcode, String porderId,
                           StringCallback callback) {

        LogUtil.e("userId-->" + userid);
        LogUtil.e("landid-->" + landid);
        LogUtil.e("pordernum-->" + pordernum);
        LogUtil.e("pesticide-->" + pesticide);
        LogUtil.e("porderid-->" + porderId);
        LogUtil.e("pcode-->" + pcode);

        get(Constants.URL_JOIN_PRODER)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("landid", landid)
                .params("pordernum", pordernum)
                .params("pesticide", pesticide)
                .params("porderid", porderId)
                .params("pcode", pcode)
                .execute(callback);
    }

    /**
     * 上传头像
     *
     * @param userid
     * @param callback
     */
    public void updataHeadImg(String userid,
                              List<File> files,
                              StringCallback callback) {
        post(Constants.URL_UPDATA_HEAD_IMG)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .isMultipart(true)
                .addFileParams("image",files)
                .execute(callback);
    }

    /**
     * 更新性别
     *
     * @param userid   用户ID
     * @param sex      性别
     * @param callback 联网回调
     */
    public void updataSex(String userid, String sex,
                          StringCallback callback) {
        post(Constants.URL_UPDATA_SEX)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("sex", sex)
                .execute(callback);
    }

    /**
     * 更新昵称
     *
     * @param userid   用户ID
     * @param name     更新昵称
     * @param callback 联网回调
     */
    public void updataNickName(String userid, String name,
                               StringCallback callback) {
        post(Constants.URL_UPDATA_NICK_NAME)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("name", name)
                .execute(callback);
    }

    /**
     * 获取个人相关全部信息
     *
     * @param userid   用户ID
     * @param callback 联网回调
     */
    public void getUserInfo(String userid, StringCallback callback) {
        post(Constants.URL_REASION_INFO_ALL)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .execute(callback);
    }

    /**
     * 首页banner图获取
     *
     * @param callback
     */
    public void getBanner(StringCallback callback) {
        OkGo.get(Constants.ULR_BANNER)
                .tag(this)
                .connTimeOut(30000)
                .execute(callback);
    }

    /**
     * 首页附近的拼单列表
     *
     * @param userid   用户ID
     * @param landid   土地ID
     * @param keyword  关键词（模糊搜索)
     * @param distance 距离搜索
     * @param callback 联网回调
     */
    public void getNearPindan(String userid, String landid, String keyword,
                              String distance, StringCallback callback) {
        LogUtil.e("userid-->" + userid);
        OkGo.get(Constants.URL_NEAR_PINDAN)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("landid", landid)
                .params("keyword", keyword)
                .params("distance", distance)
                .execute(callback);
    }

    /**
     * 提交反馈意见
     *
     * @param userid   用户ID
     * @param suggest  反馈的意见
     * @param callback 联网回调
     */
    public void updataSuggest(String userid, String suggest, StringCallback callback) {
        post(Constants.ULR_UPDATA_SUGGEST)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("suggest", suggest)
                .execute(callback);
    }

    /**
     * 创建订单之定金交付成功 之后的上传群组ID
     *
     * @param groupid  群组ID
     * @param orderid  订单ID
     * @param userid   用户ID
     * @param callback 联网回调
     */
    public void updataGroupId(String groupid, String orderid, String userid, StringCallback callback) {
        post(Constants.URL_UPDATA_GROUPID)
                .tag(this)
                .connTimeOut(30000)
                .params("groupid", groupid)
                .params("orderid", orderid)
                .params("userid", userid)
                .execute(callback);
    }

    /**
     * 获取我的订单
     *
     * @param userid   用户ID
     * @param callback 联网回调
     */
    public void getAllMyOrder(String userid, StringCallback callback) {
        post(Constants.URL_GET_MY_ORDER)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .execute(callback);
    }

    /**
     * 根据昵称获取头像
     *
     * @param username 昵称
     * @param callback 联网回调
     */
    public void getHeadImg(String username, StringCallback callback) {
        post(Constants.URL_GET_HEAD_IMG)
                .tag(this)
                .connTimeOut(30000)
                .params("username", username)
                .execute(callback);
    }

    /**
     * 获取药品列表
     *
     * @param callback
     */
    public void getDrupList(StringCallback callback) {
        post(Constants.URL_GET_DURG_LIST)
                .tag(this)
                .connTimeOut(30000)
                .execute(callback);
    }

    /**
     * 删除土地
     *
     * @param userid
     * @param landid
     * @param callback
     */
    public void deleteLand(String userid, String landid, StringCallback callback) {
        post(Constants.URL_DELETE_LAND)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("landid", landid)
                .execute(callback);
    }

    /**
     * 我的收益
     *
     * @param userid   用户ID
     * @param callback 联网回调
     */
    public void getMyEar(String userid, StringCallback callback) {
        post(Constants.URL_GET_EAR)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .execute(callback);
    }

    /**
     * 分享之获取邀请码
     *
     * @param userid
     * @param porderid
     * @param callback
     */
    public void addCode(String userid, String porderid, StringCallback callback) {
        LogUtil.e("userId-->" + userid);
        LogUtil.e("porderid-->" + porderid);
        get(Constants.URL_ADD_CODE)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("porderid", porderid)
                .execute(callback);
    }

    /**
     * 获取最新版本号
     *
     * @param callback
     */
    public void updataVersionCode(StringCallback callback) {
        get(Constants.ULR_UPDATA_VERSION)
                .tag(this)
                .connTimeOut(30000)
                .execute(callback);
    }

    public void getNewApk(FileCallback fileCallback) {
        post(Constants.ULR_UPDATA_VERSION)
                .tag(this)
                .connTimeOut(30000)
                .params("conditionParam", "")
                .isMultipart(true)
                .execute(fileCallback);
    }


    /**
     * 获取拼单详情
     *
     * @param userid   用户ID
     * @param porderid 拼单ID
     * @param callback 联网回调
     */
    public void getPidanDesc(String userid, String porderid, StringCallback callback) {
        post(Constants.URL_GET_PINDAN_DESC)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("porderid", porderid)
                .isMultipart(true)
                .execute(callback);
    }

    /**
     * 上传搜索历史
     *
     * @param userid   用户ID
     * @param keyword  关键词
     * @param callback 联网回调
     */
    public void updateKeyWord(String userid, String keyword, StringCallback callback) {
        post(Constants.URL_POST_SEARCH_HISTORY)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("keyword", keyword)
                .isMultipart(true)
                .execute(callback);
    }

    /**
     * 获取搜索词历史
     *
     * @param userid
     * @param callback
     */
    public void getKeyWord(String userid, StringCallback callback) {
        post(Constants.URL_GET_SEARCH_KEYWORD)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .isMultipart(true)
                .execute(callback);
    }

    /**
     * 立即下单
     *
     * @param userid    用户ID
     * @param landid    土地ID
     * @param pesticide 药品名称
     * @param callback  联网回调
     */
    public void quckDownTask(String userid, String landid, String pesticide, StringCallback callback) {
        post(Constants.URL_QUCK_DOWN_TASK)
                .tag(this)
                .connTimeOut(30000)
                .params("userid", userid)
                .params("landid", landid)
                .params("pesticide", pesticide)
                .isMultipart(true)
                .execute(callback);
    }


}
